package com.ruoyi.hospital.service.order.impl;

import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.hospital.domain.order.ExpressTemplate;
import com.ruoyi.hospital.domain.order.ExpressTemplateNoregion;
import com.ruoyi.hospital.domain.order.ExpressTemplateRegion;
import com.ruoyi.hospital.domain.order.Region;
import com.ruoyi.hospital.mapper.order.ExpressTemplateMapper;
import com.ruoyi.hospital.mapper.order.ExpressTemplateNoregionMapper;
import com.ruoyi.hospital.mapper.order.ExpressTemplateRegionMapper;
import com.ruoyi.hospital.service.order.IExpressTemplateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * 快递模板Service业务层处理
 * 
 * @author wendao
 * @date 2025-06-16
 */
@Service
public class ExpressTemplateServiceImpl implements IExpressTemplateService
{
    @Autowired
    private ExpressTemplateMapper expressTemplateMapper;
    @Autowired
    private ExpressTemplateNoregionMapper expressTemplateNoregionMapper;
    @Autowired
    private ExpressTemplateRegionMapper expressTemplateRegionMapper;

    /**
     * 查询快递模板
     * 
     * @param id 快递模板主键
     * @return 快递模板
     */
    @Override
    public ExpressTemplate selectExpressTemplateById(Integer id)
    {
        return expressTemplateMapper.selectExpressTemplateById(id);
    }

    /**
     * 查询快递模板列表
     * 
     * @param expressTemplate 快递模板
     * @return 快递模板
     */
    @Override
    public List<ExpressTemplate> selectExpressTemplateList(ExpressTemplate expressTemplate)
    {
        return expressTemplateMapper.selectExpressTemplateList(expressTemplate);
    }

    /**
     * 新增快递模板
     * 
     * @param expressTemplate 快递模板
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int insertExpressTemplate(ExpressTemplate expressTemplate)
    {
        expressTemplate.setCreateTime(DateUtils.getNowTimeSecond());
        int i = expressTemplateMapper.insertExpressTemplate(expressTemplate);

        //存储不可派送的
        List<ExpressTemplateNoregion> noRegions = expressTemplate.getNoRegions();
        if(noRegions.size()>0){
            for(ExpressTemplateNoregion noregion:noRegions){
                noregion.setTemplateId(expressTemplate.getId());
                expressTemplateNoregionMapper.insertExpressTemplateNoregion(noregion);
            }
        }


        //存储可派送的
        List<ExpressTemplateRegion> regions = expressTemplate.getRegions();
        if(regions.size()>0){
            for(ExpressTemplateRegion region : regions){
                region.setTemplateId(expressTemplate.getId());
                if("000000".equals(region.getRegionCode())){
                    region.setRegionCode("000000");
                    region.setRegionName("全国");
                    region.setCode("code000000");
                    expressTemplateRegionMapper.insertExpressTemplateRegion(region);
                }else{
                    List<Region> regionCodes = region.getRegionCodes();
                    region.setCode("code"+region.getRegionCode());
                    for(Region re:regionCodes){
                        region.setRegionName(re.getRegionName());
                        region.setRegionCode(re.getRegionCode());
                        expressTemplateRegionMapper.insertExpressTemplateRegion(region);
                    }
                }

            }
        }

        return i;
    }

    /**
     * 修改快递模板
     * 
     * @param expressTemplate 快递模板
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int updateExpressTemplate(ExpressTemplate expressTemplate)
    {
        //修改逻辑：1修改主模板表  --2根据templateId删除派送，重新添加   --删除不派送，重新添加
        int i = expressTemplateMapper.updateExpressTemplate(expressTemplate);


        expressTemplateNoregionMapper.deleteExpressTemplateNoregionByTemplateId(expressTemplate.getId());
        //存储不可派送的
        List<ExpressTemplateNoregion> noRegions = expressTemplate.getNoRegions();
        if(noRegions.size()>0){
            for(ExpressTemplateNoregion noregion:noRegions){
                noregion.setTemplateId(expressTemplate.getId());
                expressTemplateNoregionMapper.insertExpressTemplateNoregion(noregion);
            }
        }

        expressTemplateRegionMapper.deleteExpressTemplateRegionByTemplateId(expressTemplate.getId());
        //存储可派送的
        List<ExpressTemplateRegion> regions = expressTemplate.getRegions();
        if(regions.size()>0){
            for(ExpressTemplateRegion region : regions){
                region.setTemplateId(expressTemplate.getId());
                if("000000".equals(region.getRegionCode())){
                    region.setRegionCode("000000");
                    region.setRegionName("全国");
                    region.setCode("code000000");
                    expressTemplateRegionMapper.insertExpressTemplateRegion(region);
                }else{
                    List<Region> regionCodes = region.getRegionCodes();
                    region.setCode("code"+region.getRegionCode());
                    for(Region re:regionCodes){
                        region.setRegionName(re.getRegionName());
                        region.setRegionCode(re.getRegionCode());
                        expressTemplateRegionMapper.insertExpressTemplateRegion(region);
                    }
                }

            }
        }

        return i;
    }

    /**
     * 批量删除快递模板
     * 
     * @param ids 需要删除的快递模板主键
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int deleteExpressTemplateByIds(Integer[] ids)
    {
        expressTemplateRegionMapper.deleteExpressTemplateRegionBytemplateIds(ids);
        expressTemplateNoregionMapper.deleteExpressTemplateNoregionBytemplateIds(ids);
        return expressTemplateMapper.deleteExpressTemplateByIds(ids);
    }

    /**
     * 删除快递模板信息
     * 
     * @param id 快递模板主键
     * @return 结果
     */
    @Override
    public int deleteExpressTemplateById(Integer id)
    {
        return expressTemplateMapper.deleteExpressTemplateById(id);
    }
}
